/* Ordinamento della lista di preferenze */
ordina:-
	api(VAPI),
	findall((K-V),(member(V,VAPI),gradimentoArea(V,K)),APItemp),
	findall(A,member((_-A),APItemp),API),
	retract(api(VAPI)),
	assert(api(API)).


/* Determinazione delle preferenze */
gradimentoArea(A,K):-
	sitiInteresseIn(A,L),
	aggiungiComp(L,L1),
	gradimento(L1,K1),
	length(L,N),
	K is /(K1,N).


/* Eliminazione dei siti componenti e inserimento dei siti composti */
aggiungiComp(L,L1):-
	findall(Id1,(member(Id,L),
			 siti(Id,_,_,_,_,_,_,N),
			 ((N>1)->
				(componenti(Id,Id1),siti(Id1,_,T,_,_,_,_,0),preferenza(T,P),P>0);
				(Id1=Id)
			 )
			),
		 L1).



/* Funzione ricorsiva che calcola la preferenza dei siti (caso base)*/
gradimento(L,K):-
	L=[], 
	K is 0.

/* Funzione ricorsiva che calcola la preferenza dei siti */
gradimento(L,K):-
	L=[Id|L1],
	siti(Id,_,Tipo,I1,I2,_,_,N),
	(N==0->componenti(Id1,Id);Id1=Id),
	((evento(J),eventi(J,_,_,_,Id1))->Pev is 4;Pev is 0),
	preferenza(Tipo,P),
	K1 is *(+(P,Pev),+(I1,I2)),
	gradimento(L1,K2),
	K is +(K1,K2).